//===============================
//  功能 ：备注 
//  作者 ：上中野辅亚瑟王 
//  创建时间 ：2024-11-01  11-11-38 
//  Unity版本  ：2019.4.35f1 
//  变更时间 :  2024-11-01  11-11-38 
//===============================





using System.Collections.Generic;

namespace SensorToolkit
{
    public class ObjectCache<T> where T : new()
    {
        private Stack<T> _cache;

        public ObjectCache() : this(10) { }

        public ObjectCache(int startSize)
        {
            _cache = new Stack<T>();
            for (int i = 0; i < startSize; i++)
            { 
                _cache.Push(Create()); 
            }
        }

        public T Get()
        {
            if (_cache.Count > 0)
            {
                return _cache.Pop();
            }
            else
            {
                return Create();
            }
        }

        public virtual void Dispose(T obj)
        {
            _cache.Push(obj);
        }

        protected virtual T Create()
        {
            return System.Activator.CreateInstance<T>();
        }
    }

    public class ListCache<T> : ObjectCache<List<T>>
    {
        public override void Dispose(List<T> obj)
        {
            obj.Clear();
            base.Dispose(obj);
        }
    }
}
